package leetcode_600;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 *@author 周杨
 *RandomFlipMatrix_519 给定一个2D数组 每次生成一个随机坐标1 没有生成过的为0
 *describe:用map 将生成过的随机数映射到当前最大值 AC 10%
 *2018年9月10日 上午9:38:32
 */
public class RandomFlipMatrix_519 {
	 Map<Integer, Integer> map;
	    int rows, cols, total;
	    Random rand;
	    
	    public RandomFlipMatrix_519(int n_rows, int n_cols) {
	        map = new HashMap<>();
	        rand = new Random();
	        rows = n_rows; 
	        cols = n_cols; 
	        total = rows * cols;
	    }
	    
	    public int[] flip() {
	        int r = rand.nextInt(total--);
	        int x = map.getOrDefault(r, r);//x是此随机数对应的映射  如果没有就取该随机数
	        map.put(r, map.getOrDefault(total, total));//每次取出此次随机值 下次就替换成最大值
	        return new int[]{x / cols, x % cols};
	    }
	    
	    public void reset() {
	        map.clear();
	        total = rows * cols;
	    }
}
